#include "qframemainshortcut.h"
#include "ui_qframemainshortcut.h"
#include <QDebug>
#include <QContextMenuEvent>

QFrameMainShortcut::QFrameMainShortcut(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QFrameMainShortcut)
{
    ui->setupUi(this);
    // --------------------------------------------
    // 增加工具操作方式
    toolBar = new QToolBar("tools",this);
    toolBar->setMinimumWidth(toolBar->sizeHint().width());
    ui->verticalSpacer->changeSize(
                 20,                // 宽度（水平方向最小尺寸）
                 30,               // 高度（垂直方向最小尺寸）
                 QSizePolicy::Minimum,  // 水平方向策略
                 QSizePolicy::Fixed     // 垂直方向策略（固定高度
    );
    // --------------------------------------------
    // 设置快捷键
    QAction *editAction = new QAction(QIcon(":/icons/icon_view/quanping.png"), "edit", this);
    QAction *runsAction = new QAction(QIcon(":/icons/icon_view/bofang.png" ), "runs", this);

    // 添加动作到工具栏
    toolBar->addAction(editAction);
    toolBar->addAction(runsAction);
    // --------------------------------------------
    // 链接到外部的信号
    connect(editAction, &QAction::triggered, this, &QFrameMainShortcut::edit_slot); //转发信号到嵌入的模块
    connect(runsAction, &QAction::triggered, this, &QFrameMainShortcut::runs_slot); //转发信号到嵌入的模块

    // --------------------------------------------
    // 优化显示状态
    // 计算所有按钮的总宽度（假设每个按钮宽80px）
    int totalWidth = toolBar->actions().size() * 80;
    // 设置工具栏的最小宽度
    toolBar->setMinimumWidth(totalWidth);
    ui->ui_pages->setVisible(false); //默认不显示窗口页面
    // --------------------------------------------
    // 增加右键菜单
    PageMenuFilter * filter = new PageMenuFilter(ui->ui_mframe,this);
    this->installEventFilter(filter);
    //添加对应的槽函数进行处理
    connect(filter, &PageMenuFilter::delete_trig, this, &QFrameMainShortcut::on_menu_delete_click);

}

QFrameMainShortcut::~QFrameMainShortcut()
{
    delete ui;
}

void QFrameMainShortcut::setWidget(QWidget *page)
{
    //ui->ui_show_page = page; // 修改显示的页面
    if(ui->ui_mframe->count() == 0)
    {
        ui->ui_mframe->addTab(page, page->windowTitle()); //增加页面到主界面
        qDebug() << __FILE__ << __LINE__ << "page is ok";
        return;
    }
    for (int i = 0; i < ui->ui_mframe->count(); i++)
    {
        if(ui->ui_mframe->widget(i) == page)
        {
            ui->ui_mframe->setCurrentIndex(i);
            return; //切换成功
        }
    }
    //不存在，则创建
    ui->ui_mframe->addTab(page, page->windowTitle()); //增加页面到主界面
    ui->ui_mframe->setCurrentIndex(ui->ui_mframe->count()-1); //切换新增加的最后的界面
}

QWidget *QFrameMainShortcut::getWidget()
{
    QWidget * page = ui->ui_mframe->currentWidget();
    return page; //获取当前的页面的地址
}

bool QFrameMainShortcut::hasWidget(QWidget *page)
{
    //ui->ui_show_page = page; // 修改显示的页面
    for (int i = 0; i < ui->ui_mframe->count(); i++)
    {
        if(ui->ui_mframe->widget(i) == page)
        {
            return true; //存在页面
        }
    }
    return false; //不存在页面
}


void QFrameMainShortcut::info_blck(quint32 n_type, quint32 n_code, QString s_info, QString s_text)
{
    //set max line
    ui->ui_log->document()->setMaximumBlockCount(1000);
    //printf info
    QString s_code = QString("%1").arg(n_code,4,16,QChar('0')); //code number
    QString s_show = "[0x" + s_code +"]" + s_info + ": " +s_text; //info struct
    //qDebug() << s_show;
    QString p_icon_msg;
    if(QString::compare(s_info,"error") == 0) //错误信息
    {
        switch(n_type) //which console
        {
        case  0: ui->ui_console->append(TEXT_COLOR_RED(s_show)); break;
        case  1: ui->ui_log->append(TEXT_COLOR_RED(s_show)); break;
        default: ui->ui_console->append(TEXT_COLOR_RED(s_show)); break;
        }
        //qDebug() << QString::compare(s_info,"error");
        p_icon_msg = ":/icons/icon_msg/msg_red.png"; //红色信息

    }
    else //正确信息
    {
        switch(n_type)
        {
        case  0: ui->ui_console->append(TEXT_COLOR_WHITE(s_show)); break;
        case  1: ui->ui_log->append(TEXT_COLOR_WHITE(s_show)); break;
        default: ui->ui_console->append(TEXT_COLOR_WHITE(s_show)); break;
        }
        p_icon_msg = ":/icons/icon_msg/msg_yellow.png"; //黄色信息
    }
    //add new info note
    if(ui->ui_pages->currentIndex() != (qint32)n_type)
    {
        ui->ui_pages->setTabIcon(n_type,QIcon(p_icon_msg));
    }
}

void QFrameMainShortcut::edit_slot()
{
    ui->ui_pages->setVisible(false);
}

void QFrameMainShortcut::runs_slot()
{
    ui->ui_pages->setVisible(true);
}

void QFrameMainShortcut::on_menu_delete_click()
{
    int currentIndex = ui->ui_mframe->currentIndex();
    if (currentIndex >= 0) {  // 确保有选中的页面
        ui->ui_mframe->removeTab(currentIndex);
    }
}


